package global

import (
	"errors"
	ut "github.com/go-playground/universal-translator"
	"github.com/go-playground/validator/v10"
	"github.com/gobuffalo/packr"
	rdb "github.com/redis/go-redis/v9"
	"go.uber.org/zap"
	"gorm.io/gorm"
	"strings"
)

// 公用全局变量

var (
	// Conf 系统配置
	Conf Configuration
	// ConfBox 打包配置文件到build后的二进制程序中
	ConfBox packr.Box
	// Logger 全局日志处理
	Logger *zap.SugaredLogger
	// Db 数据库实例
	Db *gorm.DB
	// Validate 校验器
	Validate *validator.Validate
	// Translator 翻译器
	Translator ut.Translator
	// Redis Redis实例
	Redis *rdb.Client
)

const AssetsKey = "9aa570b3794fPA/W6PbAPulR24erTDc5"

func NewValidatorError(err error, custom map[string]string) error {
	if err == nil {
		return err
	}
	errs := err.(validator.ValidationErrors)
	for _, e := range errs {
		trans := e.Translate(Translator)
		// 判断错误字段是否在自定义集合中，在则替换错误信息中的字段
		if v, ok := custom[e.Field()]; ok {
			return errors.New(strings.Replace(trans, e.Field(), v, 1))
		} else {
			return errors.New(trans)
		}
	}
	return nil
}
